package com.liliudong.rommath.biz.sys.param;

import com.liliudong.rommath.biz.sys.entity.SysMenu;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;

import java.util.List;

/**
 * @author liliudong
 * @date 2025年01月06日 19:52
 */
@Data
public class SysMenuModifyParam {
    
    /**
     * 主键
     */
    @NotNull(message = "主键不能为空")
    private Long id;

    /**
     * 父级id
     */
    @NotNull(message = "父级id不能为空")
    private Long parentId;

    /**
     * 菜单类型 0代表菜单、1代表iframe、2代表外链、3代表按钮
     */
    
    private SysMenu.MenuType menuType;

    /**
     * 路由路径
     */
    
    private String path;

    /**
     * 路由名称（必须保持唯一）
     */
    @NotBlank(message = "名称不能为空")
    private String name;

    /**
     * 路由重定向（默认跳转地址）
     */
    
    private String redirect;

    /**
     * 菜单名称
     */
    
    private String title;

    /**
     * 菜单图标
     */
    
    private String icon;

    /**
     * 是否在菜单中显示 0.否 1.是
     */
    
    private Integer showLink;

    /**
     * 排序
     */
    
    private Integer rank;

    /**
     * 按需加载需要展示的页面
     */
    
    private String component;

    /**
     * 菜单名称右侧的额外图标
     */
    
    private String extraIcon;

    /**
     * 是否显示父级菜单
     */
    
    private Integer showParent;

    /**
     * 是否缓存该路由页面（开启后，会保存该页面的整体状态，刷新后会清空状态）
     */
    
    private Integer keepAlive;

    /**
     * 需要内嵌的iframe链接地址
     */
    
    private String frameSrc;

    /**
     * 内嵌的iframe页面是否开启首次加载动画
     */
    
    private Integer frameLoading;

    /**
     * 当前菜单名称或自定义信息禁止添加到标签页
     */
    
    private Integer hiddenTag;

    /**
     * 当前菜单名称或自定义信息固定添加到标签页
     */
    
    private Integer fixedTag;

    /**
     * 将某个菜单激活
     */
    
    private String activePath;

    /**
     * 当前页面进场动画，比如 enterTransition: "animate__fadeInLeft"
     */
    
    private String enterTransition;

    /**
     * 当前页面离场动画，比如 leaveTransition: "animate__fadeOutRight"
     */
    
    private String leaveTransition;

    /**
     * 权限标识
     */
    
    private String permission;

    /**
     * 按钮列表
     */
    private List<Button> buttonList;

    @Data
    public static class Button {

            /**
            * 按钮名称
            */
            private String name;

            /**
            * 按钮权限
            */
            private String permission;
    }
}
